/*-------------------<-- Start of Description-->---------------------\ | Check to see if a word or excel window is opened already. | |---------------------<-- End of Description-->----------------------| |--------------------------------------------------------------------| |------------<-- Start of Files or Arguments Needed-->---------------| | Arguments: | | win= or window= or just a file reference; | | fileref= file reference; | | Note: the fileref and win do not need to be both present; | | return=: if you don't want a return value, | | "F" or "False" - No return value | | "T" or "" or "True" - return a value; | |------------------<-- End of Arguments Needed-->--------------------| |--------------------------------------------------------------------| |------------------<-- Start of Files Created-->---------------------| | Example: %WinChk(excel, return = F); | | %WinChk(win=wordsys, return=T); | | %WinChk(wordsys); | | Usage: %WinChk(win=, fileref=, return=); | \-------------------<-- End of Files Created-->---------------------*/ %macro WinChk/parmbuff; /*--------------------------------------------\ | Copy Right: Duo Zhou; | | Created: 10-26-2001 10:25pm; | | Modified: 11-4-2001 9:11pm; | | Purpose: Check to see if a word or excel | | window is opened; | \--------------------------------------------*/ %local dsid rc win fileref return; /*Read the first argument of the input;*/ %let arg=%qscan(&syspbuff,1,%str((),)); %put %index(%quote(%upcase(%sysfunc(compress(%quote(&arg))))),%str(WIN=)); %put; /*if it includes "win=" or "window=" parameters, it will take input after "=" as the */ /* first file reference;*/ /*if it does not have "=", then use the entire first argument as the file reference;*/ /*if not argument is provided, make a null file reference;*/ %if (%index(%quote(%upcase(%sysfunc(compress(%quote(&arg))))),%str(WIN=))) or (%index(%quote(%upcase(%sysfunc(compress(%quote(&arg))))),%str(WINDOW=))) %then %do; %let win=%qscan(&arg, 2, %str(=)); %put --> Checking the status of window "&win" to see if it is opened.; %end; %else %if &arg ne %then %do; %let win=&arg; %put --> Checking the status of window "&win" to see if it is opened.; %end; %else %if (not %SYSFUNC(FEXIST(&win))) or (%index(%upcase(&win),WORD)) or (%index(%upcase(&win),EXCEL)) %then %do; %let win= word; %put --> You forgot to give me an argument or you gave me a window name that; %put --> I can%str(%')t recognize. (I can check Microsoft Word and Excel only.); %put --> I am going to take "word" as default. Please, check your input.; %end; /*if the input is a valid file reference, try to open it;*/ /*if it is not a valid file reference, check if it has a substring of "word" or "excel",*/ /* if so try to open "word" or "excel" accordingly;*/ /*if the file reference is not valid nor does it have "word" or "excel" substring, use*/ /* word as default;*/ %if (%SYSFUNC(FEXIST(&win))) %then %do; %let dsid=%sysfunc(fopen(&win,o,132,e)); %end; %else %if (%index(%upcase(&win),WORD)) or (%index(%upcase(&win),EXCEL)) %then %do; %if (%index(%upcase(&win),WORD)) %then %do; %let dsid=%sysfunc(fopen(wordsys,o,132,e)); %end; %else %if (%index(%upcase(&win),EXCEL)) %then %do; %let dsid=%sysfunc(fopen(excelsys,o,132,e)); %end; %end; /*if the file reference can be opened, the file is opened at the time;*/ /*otherwise it is not;*/ %if &dsid %then %do; %put --> Window "&win" is opened already.; %if not (%index(%quote(%upcase(%sysfunc(compress(%quote(&syspbuff))))),%str(RETURN=F))) %then %do; &dsid %end; %let rc=%sysfunc(fclose(&dsid)); %end; %else %do; %put --> Window "&win" isn%str(%')t opened.; %if not (%index(%quote(%upcase(%sysfunc(compress(%quote(&syspbuff))))),%str(RETURN=F))) %then %do; &dsid %end; %end; %put; %mend WinChk;